/**
 * Either函子（捕获错误）
 */
class Left {
  static of(value) {
    return new Left(value);
  }

  constructor(value) {
    this._value = value;
  }

  map(fn) {
    return this;
  }
}

class Right {
  static of(value) {
    return new Right(value);
  }

  constructor(value) {
    this._value = value;
  }

  map(fn) {
    return new Right(fn(this._value));
  }
}

function parseJSON(value) {
  try {
    return Right.of(JSON.parse(value));
  } catch (error) {
    return Left.of({ error: error.message });
  }
}
//报错的
// const f = parseJSON("{name:zx}");
// console.log(f)

// 正常的
const f = parseJSON('{"name":"zx"}').map(x=>x.name.toUpperCase());
console.log(f)